import { Injectable } from '@nestjs/common';
import { PassportStrategy } from '@nestjs/passport';
import { ExtractJwt, Strategy } from 'passport-jwt';
import { UsersService } from '../users/users.service'; // 引入 UsersService
import { JwtPayload } from './jwt-payload.interface';

@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {
  constructor(private usersService: UsersService) {
    super({
      // 从请求头中提取 JWT
      jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
      // 使用你的密钥
      secretOrKey: 'xiaojie',
    });
  }

  async validate(payload: JwtPayload) {
    const { username } = payload; // 获取用户用户名
    const user = await this.usersService.findOne(username); // 查找用户

    // 如果用户不存在，抛出 NotFoundException
    if (!user) {
      throw new Error('没有该用户');
    }

    // 如果需要，你可以在这里附加一些额外的权限检查
    return { ...user, sub: user.data.id }; // 返回用户信息，后续的路由可以使用这个数据
  }
}
